package main

import (
	"fmt"
	"log"

	"github.com/Unknwon/macaron"
)

func example1() {
	m := macaron.Classic()
	m.Get("/", func() string {
		return "hello world!"
	})
	m.Run()
}

func example2() {
	m := macaron.Classic()
	//不同处理器之间传递数据Num
	m.Get("/", func(ctx *macaron.Context) {
		ctx.Data["Num"] = 1
	}, func(ctx *macaron.Context) {
		ctx.Data["Num"] = ctx.Data["Num"].(int) + 1
	}, func(ctx *macaron.Context) string {
		return fmt.Sprintf("Num: %d", ctx.Data["Num"])
	})
	m.Run()
}

func example3() {
	m := macaron.Classic()
	m.Get("/", func(ctx *macaron.Context) string {
		// return ctx.Query("uid")// 获取查询字段
		// return fmt.Sprintf("uid = %d", ctx.QueryInt("uid"))//根据类型获取查询，类型不对的话，返回零值
		return ctx.RemoteAddr() //获取远程地址
	})
	m.Run()
}

func example4() {
	m := macaron.Classic()
	//Next()
	m.Get("/",
		func(ctx *macaron.Context) {
			fmt.Println("处理器1进入")
			ctx.Next()
			fmt.Println("处理器1退出")
		},
		func(ctx *macaron.Context) {
			fmt.Println("处理器2进入")
			ctx.Next()
			fmt.Println("处理器2退出")
		},
		func(ctx *macaron.Context) {
			fmt.Println("处理器3进入")
			ctx.Next()
			fmt.Println("处理器3退出")
		},
	)
	m.Run()
}
func example5() {
	m := macaron.Classic()
	m.Get("/set", func(ctx *macaron.Context) {
		ctx.SetCookie("user", "joe")
	})
	m.Get("/get", func(ctx *macaron.Context) string {
		return ctx.GetCookie("user")
	})
	m.Run()
}

// cookie全局加密
func example6() {
	m := macaron.Classic()
	m.SetDefaultCookieSecret("123123")
	m.Get("/set", func(ctx *macaron.Context) {
		ctx.SetSecureCookie("user", "joe")
	})
	m.Get("/get", func(ctx *macaron.Context) string {
		r, _ := ctx.GetSecureCookie("user")
		return r
	})
	m.Run()
}

// cookie局部加密
func example7() {
	m := macaron.Classic()
	m.Get("/set", func(ctx *macaron.Context) {
		ctx.SetSuperSecureCookie("123", "user", "joe")
	})
	m.Get("/get", func(ctx *macaron.Context) string {
		// val, _ := ctx.GetSuperSecureCookie("1231", "user")//密钥不对，获取不到cookie值
		val, _ := ctx.GetSuperSecureCookie("123", "user")
		return val
	})
	m.Run()
}

func example8() {
	m := macaron.Classic()
	m.Get("/",
		func(ctx *macaron.Context) {
			ctx.Data["Count"] = 1
		},
		func(ctx *macaron.Context) {
			ctx.Data["Count"] = ctx.Data["Count"].(int) + 1
		},
		func(ctx *macaron.Context) {
			ctx.Data["Count"] = ctx.Data["Count"].(int) + 1
		},
		func(ctx *macaron.Context) {
			ctx.Data["Count"] = ctx.Data["Count"].(int) + 1
		},
		func(ctx *macaron.Context) {
			ctx.Data["Count"] = ctx.Data["Count"].(int) + 1
		},
		func(ctx *macaron.Context) string {
			return fmt.Sprintf("There are %d handlers before this", ctx.Data["Count"])
		},
	)
	m.Run()
}

// http://127.0.0.1:4000/dir/
// http://127.0.0.1:4000/hello.css
func example9() {
	m := macaron.Classic()
	m.Run()
}

//容错
func example10() {
	// macaron.Env = macaron.PROD
	m := macaron.Classic()
	m.Get("/", func() {
		panic("有钱，任性！")
	})
	m.Run()
}
func example11() {
	// macaron.Env = macaron.PROD
	m := macaron.Classic()
	m.Get("/", func(l *log.Logger) {
		l.Println("这是一行日志")
	})
	m.Run()
}

func main() {
	// example1()
	// example2()
	// example3()
	// example4()
	// example5()
	// example6()
	// example7()
	// example8()
	// example9()
	// example10()
	example11()
}
